package com.suoluo.zenapp.common;

import java.util.StringTokenizer;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class UBB {
	public UBB() {

	}
	
	private static UBBTag [] tags = {
		new UBBTag("(\\[b\\])(.[^\\[]*)(\\[/b\\])", "<b>$2</b>","$2"),//粗体
		new UBBTag("(\\[i\\])(.[^\\[]*)(\\[/i\\])", "<i>$2</i>","$2"),//斜体
		new UBBTag("\r\n", "<br/>","")//换行
	};
//
//	// 把UBB代码转换成HTML代码
//	public static String toUBB(String fString) {
//		return (ChkString(formatStr(fString)));
//	}
//
//	// 屏蔽HTML代码，并处理回车和换行
//	public static String formatStr(String fString) {
//		fString = repstr(fString, "‘", "'");
//		fString = repstr(fString, "\"", "“");
//		fString = repstr(fString, "＜", "<");
//		fString = repstr(fString, "＜", "<");
//		fString = repstr(fString, "＞", ">");
//		fString = repstr(fString, " ", "\r");
//		return (fString);
//	}
//
//	// 把UBB代码转换成HTML代码以便正常显示
//	public static String ChkString(String fString) {
//		fString = fString.trim();
//
//		if (fString.equals(""))
//			fString = " ";
//		else {
//			fString = doCode(fString, "<B>", "</B>", "<b>", "</b>");
//			fString = doCode(fString, "<u>", "</u>", "<u>", "</u>");
//			fString = doCode(fString, "<I>", "</I>", "<i>", "</i>");
//			fString = doCode(fString, "[red]", "[/red]", "<font color=red>",
//					"</font id=red>");
//			fString = doCode(fString, "[green]", "[/green]",
//					"<font color=green>", "</font id=green>");
//			fString = doCode(fString, "[blue]", "[/blue]", "<font color=blue>",
//					"</font id=blue>");
//			fString = doCode(fString, "[white]", "[/white]",
//					"<font color=white>", "</font id=white>");
//			fString = doCode(fString, "[purple]", "[/purple]",
//					"<font color=purple>", "</font id=purple>");
//			fString = doCode(fString, "[yellow]", "[/yellow]",
//					"<font color=yellow>", "</font id=yellow>");
//			fString = doCode(fString, "[violet]", "[/violet]",
//					"<font color=violet>", "</font id=violet>");
//			fString = doCode(fString, "[brown]", "[/brown]",
//					"<font color=brown>", "</font id=brown>");
//			fString = doCode(fString, "[black]", "[/black]",
//					"<font color=black>", "</font id=black>");
//			fString = doCode(fString, "[pink]", "[/pink]", "<font color=pink>",
//					"</font id=pink>");
//			fString = doCode(fString, "[orange]", "[/orange]",
//					"<font color=orange>", "</font id=orange>");
//			fString = doCode(fString, "[gold]", "[/gold]", "<font color=gold>",
//					"</font id=gold>");
//			fString = doCode(fString, "<h1>", "</h1>", "<h1>", "</h1>");
//			fString = doCode(fString, "<h2>", "</h2>", "<h2>", "</h2>");
//			fString = doCode(fString, "<h3>", "</h3>", "<h3>", "</h3>");
//			fString = doCode(fString, "<h4>", "</h4>", "<h4>", "</h4>");
//			fString = doCode(fString, "<h5>", "</h5>", "<h5>", "</h5>");
//			fString = doCode(fString, "<h6>", "</h6>", "<h6>", "</h6>");
//			fString = doCode(fString, "[size=1]", "[/size=1]", "<font size=1>",
//					"</font id=size1>");
//			fString = doCode(fString, "[size=2]", "[/size=2]", "<font size=2>",
//					"</font id=size2>");
//			fString = doCode(fString, "[size=3]", "[/size=3]", "<font size=3>",
//					"</font id=size3>");
//			fString = doCode(fString, "[size=4]", "[/size=4]", "<font size=4>",
//					"</font id=size4>");
//			fString = doCode(fString, "[size=5]", "[/size=5]", "<font size=5>",
//					"</font id=size5>");
//			fString = doCode(fString, "[size=6]", "[/size=6]", "<font size=6>",
//					"</font id=size6>");
//			fString = doCode(fString, "[left]", "[/left]", "<div align=left>",
//					"</div id=left>");
//			fString = doCode(fString, "<center>", "</center>", "<center>",
//					"</center>");
//			fString = doCode(fString, "<div align=right>", "</div>",
//					"<div align=right>", "</div id=right>");
//			fString = doCode(fString, "<pre class=CodeSamp>", "</pre>",
//					"<pre id=code><font face=courier size=3 id=code>",
//					"</font id=code></pre id=code>");
//			fString = doCode(fString, "[url]", "[/url]", "<a>", "</a>");
//			fString = addlink(fString);
//		}
//		return (fString);
//	}
//
//	// 方便的替换函数
//	public static String doCode(String fString, String fOTag, String fCTag,
//			String fROTag, String fRCTag) {
//		fString = repstr(fString, fROTag, fOTag);
//		fString = repstr(fString, fRCTag, fCTag);
//		return (fString);
//	}
//
//	// 处理链接
//	public static String addlink(String str) {
//		String hrefTagPre = "<a>";
//		String hrefTagLast = "</a>";
//		String hrefTxt = "";
//		String strReturn = "";
//		int iSearchedFrom = 0;
//		int first = 0;
//		int last = 0;
//
//		while ((iSearchedFrom = str.indexOf(hrefTagPre, iSearchedFrom)) != -1) {
//			first = iSearchedFrom + 3;
//			if ((iSearchedFrom = str.indexOf(hrefTagLast, iSearchedFrom)) != -1) {
//				last = iSearchedFrom;
//				iSearchedFrom += 4;
//				strReturn = str.substring(first, last);
//				if (strReturn.indexOf("<a>", 0) != -1) {
//					strReturn = repstr(strReturn, "", "<a>");
//				}
//				hrefTxt = "<a href = " + "\"" + strReturn + "\"" + ">"
//						+ strReturn + "</a>";
//				strReturn = str.substring(first - 3, iSearchedFrom);
//				str = repstr(str, hrefTxt, strReturn);
//				iSearchedFrom = 0;
//			} else
//				break;
//		}
//		return (str);
//	}
//
//	public static String fd(String str) {
//		String fd = repstr(str, "''", "'");
//		return fd;
//	}
//	
//	public static void main(String []args){
//		String test = "dafdasds'<a>dsafdsafdsa'</a>dafda<a>sfds'dasfdasfdadf";
//		System.out.println(addlink(test));
//		System.out.println(repstr(test, "''", "'"));
////		String aaa = "         sssssssssssssssssss              ";
////		System.out.println(aaa.length());
////		System.out.println(StringUtils.trimTrailingWhitespace(aaa).length());
////		System.out.println(StringUtils.trimTrailingWhitespace(aaa));
////		test = addBr(test);
//	}
//	
//	public static String repstr(String str, String  replacement, String regex) {
//		return str.replaceAll(regex, replacement);
//////		str.replaceAll(regex, replacement);
////		int iLen = str.length();
////		int iDenLen = strDen.length();
////		int iSrcLen = strSrc.length();
////		String strReturn = "";
////		int iSearchedFrom = 0;
////		int iPrevSearchedFrom = 0;
////
////		while ((iSearchedFrom = str.indexOf(strSrc, iSearchedFrom)) != -1) {
////			strReturn += str.substring(iPrevSearchedFrom, iSearchedFrom);
////			strReturn += strDen;
////			iSearchedFrom += iSrcLen;
////			iPrevSearchedFrom = iSearchedFrom;
////		}
////
////		if (iPrevSearchedFrom != 0)
////			strReturn += str.substring(str.lastIndexOf(strSrc) + iSrcLen,
////					str.length());
////		else
////			strReturn = str;
////
////		return (strReturn);
//	}
//
//	public static String removeComment(String content) {
//		StringBuilder makeContent = new StringBuilder();
//		StringTokenizer strToken = new StringTokenizer(content, "\n");
//		String tempToken = null;
//
//		while (strToken.hasMoreTokens()) {
//			tempToken = strToken.nextToken();
//			if (tempToken.indexOf(":") != 0)
//				makeContent.append(tempToken).append("\n");
//		}
//		return makeContent.toString();
//	}

	/**
	 * 增加内容换行
	 * @param content 需要换行的内容
	 * @return String 换行的内容
	 */
	public static String addBr(String content) {
		if (StringUtil.isEmpty(content)){
			return content;
		}
		StringBuilder strBuf = new StringBuilder();
		StringTokenizer strToken = new StringTokenizer(content, "\n");
		while (strToken.hasMoreTokens()) {
			strBuf.append(strToken.nextToken()).append("<br/>");
		}
		return strBuf.toString();
	}
	
	public static String decode(String content){
		if (content == null|| "".equals(content)){
			return content;
		}
		for (UBBTag tag : tags){
			content = decodeTag(content, tag);
		}
		return content;
	}
	
	/**
	 * 清除UBB标签
	 * @param content
	 * @return
	 */
	public static String clear(String content){
		for (UBBTag tag : tags){
			content = clearTag(content, tag);
		}
		return content;
	}
	
	private static String clearTag(String content,UBBTag tag){
		Matcher m = Pattern.compile(tag.getUbbTag(),
                Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE)
            .matcher(content);
      return m.replaceAll(tag.getClearTag());
	}
	
	private static String decodeTag(String content,UBBTag tag){
		  Matcher m = Pattern.compile(tag.getUbbTag(),
	                Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE)
	            .matcher(content);
	      return m.replaceAll(tag.getHtmlTag());
	}
	
	
	
	private static class UBBTag{
		private final String ubbTag;
		private final String htmlTag;
		
		private final String clearTag;
		
		
		public UBBTag(String ubbTag, String htmlTag,String clearTag) {
			super();
			this.ubbTag = ubbTag;
			this.htmlTag = htmlTag;
			this.clearTag = clearTag;
		}
		public String getUbbTag() {
			return ubbTag;
		}
		public String getHtmlTag() {
			return htmlTag;
		}
		public String getClearTag() {
			return clearTag;
		}
	}

	
	public static void main(String []args){
		String aaa = "aa[i]a[b]dsafds[/b]a\r\ndsafdsafdsafds\r\ndsafdsaf[/i]dsa";
//		 Matcher m = Pattern.compile("\r\n",
//	                Pattern.DOTALL | Pattern.CASE_INSENSITIVE | Pattern.MULTILINE)
//	            .matcher(aaa);
//		System.out.println(m.replaceAll("<br/>"));
		System.out.println(clear(aaa));
	}
//	/**
//	 * 将<br/> 转换成\n
//	 * @param content 内容
//	 * @return String转义后的内容
//	 */
//	public static String delBr(String content) {
//		StringBuilder strBuf = new StringBuilder();
//		StringTokenizer strToken = new StringTokenizer(content, "<br/>");
//		while (strToken.hasMoreTokens()) {
//			strBuf.append(strToken.nextToken()).append("\n");
//		}
//		return strBuf.toString();
//	}
	
	
}